package org.example;

import java.util.Objects;

public class RecordWithInterfaceTest {

    // record可以嵌套在类中，也可以在某个方法内定，嵌套和局部的record隐含都是静态的。
    // record类型是不可被继承的，因为它是final类型
    // record类型也不可以继承其它类，但是它可以实现某个接口
    record Person(String firstName, String lastName, int age) implements Runnable{
        // 这是record类型特有的紧凑构造器（compact constructor）
        // 它看上去和构造器一样，但是没有参数。
        Person {
            // 紧凑构造器通常用于验证参数。
            Objects.requireNonNull(firstName);
            Objects.requireNonNull(lastName);
            // 也可以修改字段的初始化值:
            if(age < 0) {
                age = 1;
            }
        }

        @Override
        public void run() {
            System.out.println("Running Person: " + this);
        }

        public static void doSomething() {
            System.out.println("running static method");
        }
    }

    public static void main(String[] args) {
        Person person = new Person("John", "Doe", 0);
        person.run();
        Person.doSomething();
    }
}
